﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Iacym.BusinessLogic;
using Iacym.Entities;
using Microsoft.Practices.Unity;
using System.IO;
using System.Security.Cryptography;

namespace Iacym.UI
{
    public partial class FrmMttoPersona : Form
    {
        [Dependency]
        public ISexoBL sexoBL { get; set; }
        [Dependency]
        public IEstadoCivilBL estadocivilBL { get; set; }
        [Dependency]
        public IUbigeoBL ubigeoBL { get; set; }
        [Dependency]
        public IIglesiaBL iglesiaBL { get; set; }
        [Dependency]
        public ILineaTelefonicaBL lineatelefonicaBL { get; set; }
        [Dependency]
        public IIdiomaBL idiomaBL { get; set; }
        [Dependency]
        public IPersonaBL personaBL { get; set; }
        [Dependency]
        public ITelefonoBL telefonoBL { get; set; }
        [Dependency]
        public IPersona_IdiomaBL personaidiomaBL { get; set; }
        [Dependency]
        public ICelulaBL celulaBL { get; set; }
        [Dependency]
        public IPersona_ProfesionBL personaprofesionBL { get; set; }
        [Dependency]
        public IPersona_EspecialidadBL personaespecialidadBL { get; set; }
        [Dependency]
        public ITrabajoBL trabajoBL { get; set; }
        [Dependency]
        public IFoto_PersonaBL fotopersonaBL { get; set; }
        [Dependency]
        public IUsuarioBL usuarioBL { get; set; }

        bool isnew;

        TRABAJO _trabajo;
        byte[] pic = null;
        StringBuilder sb = new StringBuilder();

        public USUARIO currentUsuarioMttoPersona { get; set; }

        public FrmMttoPersona()
        {
            InitializeComponent();
            this.BuildUp();
            sEXOBindingSource.DataSource = sexoBL.GetAllFromSexo();
            eSTADOCIVILBindingSource.DataSource = estadocivilBL.GetAllFromEstadoCivil();
            LINEA_TELEFONICA.DataSource = lineatelefonicaBL.GetAllFromLineaTelefonica();
            RELACION_IDIOMAS.DataSource = idiomaBL.GetAllFromIdioma();
            _trabajo = new TRABAJO();

        }

        public PERSONA CurrentPersona
        {
            get { return pERSONABindingSource.Current as PERSONA; }
            set { pERSONABindingSource.DataSource = value; }
        }

        public void Nuevo()
        {
            //GBDatosCreyente.Enabled = false;
            //GBFechasCreyente.Enabled = false;
            isnew = true;
            LNumMembresia.Text = @"00000000";
            pERSONABindingSource.AddNew();
            GBDatosCreyente.Enabled = false;
            GBFechasCreyente.Enabled = false;
            rbtnNOCreyente.Select();
        }

        public void Editar()
        {
            isnew = false;

            if (CurrentPersona.NoCreyente)
            {
                rbtnNOCreyente.Checked = true;
            }
            else if (CurrentPersona.Transferencia)
            {
                rbtnTransferencia.Checked = true;
            }
            else if (CurrentPersona.Transferido)
            {
                rbtnTransferido.Checked = true;
            }
            else if (CurrentPersona.Local)
            {
                rbtnLocal.Checked = true;
            }

            rbtnActivo.Checked = rbtnActivo.Checked = CurrentPersona.Estado ? true : false;
            rbtnMuerte.Checked = rbtnMuerte.Checked = CurrentPersona.Muerte ? true : false;

            CurrentPersona.UBIGEO = ubigeoBL.GetFromUbigeoByNumero(CurrentPersona.UbigeoId);
            CurrentPersona.TELEFONOS = telefonoBL.GetFromTelefonoByPersona(CurrentPersona.Id);
            CurrentPersona.PERSONA_IDIOMAS = personaidiomaBL.GetFromPersonaIdiomasByPersona(CurrentPersona.Id);
            CurrentPersona.IGLESIA = iglesiaBL.GetFromIglesiaById(Convert.ToInt32(CurrentPersona.IglesiaId));
            CurrentPersona.CELULA = celulaBL.GetFromCelulaById(CurrentPersona.CelulaId);
            CurrentPersona.PERSONA_PROFESION = personaprofesionBL.GetFromPersonaProfesionByPersonaId(CurrentPersona.Id);
            CurrentPersona.PERSONA_ESPECIALIDAD = personaespecialidadBL.GetFromPersonaEspecialidadByPersonaId(CurrentPersona.Id);
            CurrentPersona.TRABAJOes = trabajoBL.GetFromTrabajoByPersonaId(CurrentPersona.Id);
            pERSONABindingSource.DataSource = CurrentPersona;

            if (CurrentPersona.CargoMinisterio == 1)
            {
                CBCargoMinisterio.SelectedIndex = 0;
            }
            if (CurrentPersona.CargoMinisterio == 2)
            {
                CBCargoMinisterio.SelectedIndex = 1;
            }
            if (CurrentPersona.CargoMinisterio == 3)
            {
                CBCargoMinisterio.SelectedIndex = 2;
            }
            if (CurrentPersona.CargoMinisterio == 4)
            {
                CBCargoMinisterio.SelectedIndex = 3;
            }


            var img = fotopersonaBL.GetFromFotoPersonaByPersonaId(CurrentPersona.Id);
            if (img.Imagen != null)
            {
                MemoryStream stream = new MemoryStream(img.Imagen);
                PBFoto.Image = Image.FromStream(stream);
            }
            else
            {
                PBFoto.Image = PBFoto.ErrorImage;
            }


            if (CurrentPersona.NroMembresia != 0)
            {
                LNumMembresia.Text = CurrentPersona.NroMembresia.ToString();
            }
            else
            {

                LNumMembresia.Visible = false;
                LNumMembresia.Text = @"00000000";
            }

            pERSONABindingSource.ResetBindings(true);
        }

        public void VerDetalle()
        {
            BtnGuardar.Visible = false;
            button1.Visible = false;
            isnew = false;
            if (CurrentPersona.NoCreyente)
            {
                rbtnNOCreyente.Checked = true;
            }
            else if (CurrentPersona.Transferencia)
            {
                rbtnTransferencia.Checked = true;
            }
            else if (CurrentPersona.Transferido)
            {
                rbtnTransferido.Checked = true;
            }
            else if (CurrentPersona.Local)
            {
                rbtnLocal.Checked = true;
            }

            rbtnActivo.Checked = rbtnActivo.Checked = CurrentPersona.Estado ? true : false;
            rbtnMuerte.Checked = rbtnMuerte.Checked = CurrentPersona.Muerte ? true : false;

            CurrentPersona.TELEFONOS = telefonoBL.GetFromTelefonoByPersona(CurrentPersona.Id);
            CurrentPersona.PERSONA_IDIOMAS = personaidiomaBL.GetFromPersonaIdiomasByPersona(CurrentPersona.Id);
            CurrentPersona.IGLESIA = iglesiaBL.GetFromIglesiaById(Convert.ToInt32(CurrentPersona.IglesiaId));
            CurrentPersona.CELULA = celulaBL.GetFromCelulaById(CurrentPersona.CelulaId);
            CurrentPersona.PERSONA_PROFESION = personaprofesionBL.GetFromPersonaProfesionByPersonaId(CurrentPersona.Id);
            CurrentPersona.PERSONA_ESPECIALIDAD = personaespecialidadBL.GetFromPersonaEspecialidadByPersonaId(CurrentPersona.Id);
            CurrentPersona.TRABAJOes = trabajoBL.GetFromTrabajoByPersonaId(CurrentPersona.Id);
            CurrentPersona.UBIGEO = ubigeoBL.GetFromUbigeoByNumero(CurrentPersona.UbigeoId);
            pERSONABindingSource.DataSource = CurrentPersona;
            pERSONABindingSource.ResetBindings(true);

            var img = fotopersonaBL.GetFromFotoPersonaByPersonaId(CurrentPersona.Id);
            if (img.Imagen != null)
            {
                MemoryStream stream = new MemoryStream(img.Imagen);
                PBFoto.Image = Image.FromStream(stream);
            }
            else
            {
                PBFoto.Image = PBFoto.ErrorImage;
            }


            if (CurrentPersona.NroMembresia != 0)
            {
                LNumMembresia.Text = CurrentPersona.NroMembresia.ToString();
            }
            else
            {
                LNumMembresia.Text = @"00000000";
            }
        }

        private void FrmMttoPersona_Load(object sender, EventArgs e)
        {


        }

        private void CBSexo_Click(object sender, EventArgs e)
        {
            sEXOBindingSource.DataSource = sexoBL.GetAllFromSexo();
        }

        private void CBSexo_SelectedValueChanged(object sender, EventArgs e)
        {
            if (CBSexo.SelectedValue != null)
            {
                sexoIdTextBox.Text = CBSexo.SelectedValue.ToString();
            }
        }

        private void CBEstadoCivil_Click(object sender, EventArgs e)
        {
            eSTADOCIVILBindingSource.DataSource = estadocivilBL.GetAllFromEstadoCivil();
        }

        private void CBEstadoCivil_SelectedValueChanged(object sender, EventArgs e)
        {
            if (CBEstadoCivil.SelectedValue != null)
            {
                estadoCivilIdTextBox.Text = (eSTADOCIVILBindingSource.Current as ESTADO_CIVIL).Id.ToString();
            }

        }

        private void BtnCheckUbigeo_Click(object sender, EventArgs e)
        {
            FrmUbigeo frm = new FrmUbigeo();
            frm.Extend();
            frm.currentUsuarioUbigeo = currentUsuarioMttoPersona;
            frm.ShowDialog();

            if (frm._currentUbigeo != null)
            {
                CurrentPersona.UBIGEO = frm._currentUbigeo;
                CurrentPersona.UbigeoId = frm._currentUbigeo.numero;
            }
            //var ubigeo = ubigeoBL.GetFromUbigeoByUbigeo(idUbigeoTextBox.Text);
            //CurrentPersona.UBIGEO = ubigeo;

            //CurrentPersona.EstadoCivilId = Int32.Parse(CBEstadoCivil.SelectedValue.ToString());
            //CurrentPersona.SexoId = Int32.Parse(CBSexo.SelectedValue.ToString());

            pERSONABindingSource.ResetBindings(true);
        }

        private void idUbigeoTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsNumber(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }


        private void BtnExtIglesia_Click(object sender, EventArgs e)
        {
            FrmIglesia frm = new FrmIglesia();
            frm.Extend();
            frm.currentUsuarioIglesia = currentUsuarioMttoPersona;
            frm.ShowDialog();

            if (frm.CurrentIglesia != null)
            {
                CurrentPersona.IGLESIA = frm.CurrentIglesia;
                CurrentPersona.IglesiaId = frm.CurrentIglesia.Id;
                pERSONABindingSource.ResetBindings(true);


                if (CurrentPersona.IGLESIA.Id == 2)
                {
                    GBFechasCreyente.Enabled = true;
                    //GBFechasTransferencia.Enabled = false;
                }
                else if (CurrentPersona.IGLESIA.Id == 1)
                {
                    GBFechasCreyente.Enabled = false;
                    //GBFechasTransferencia.Enabled = false;
                }
                else if (CurrentPersona.IGLESIA.Id != 2 | CurrentPersona.IGLESIA.Id != 1)
                {
                    GBFechasCreyente.Enabled = false;
                    //GBFechasTransferencia.Enabled = true;
                }
            }

        }

        private void BtnExtCelula_Click(object sender, EventArgs e)
        {
            FrmCelula frm = new FrmCelula();
            frm.Extend();
            frm.currentUsuarioCelula = currentUsuarioMttoPersona;
            frm.ShowDialog();

            if (frm.CurrentCelula != null)
            {
                CurrentPersona.CELULA = frm.CurrentCelula;
                CurrentPersona.CelulaId = frm.CurrentCelula.Id;
                pERSONABindingSource.ResetBindings(true);
            }
        }

        private void BtnExtDiscipulador_Click(object sender, EventArgs e)
        {
            FrmPersona frm = new FrmPersona();
            frm.Extend();
            frm.currentUsuarioPersona = currentUsuarioMttoPersona;
            frm.ShowDialog();

            if (frm.CurrentPersona != null)
            {
                CurrentPersona.DISCIPULADOR = frm.CurrentPersona;
                CurrentPersona.DiscipuladorId = frm.CurrentPersona.Id;
                pERSONABindingSource.ResetBindings(true);
            }
        }

        private void BtnFileDialog_Click(object sender, EventArgs e)
        {
            this.openFileDialog1.ShowDialog();
        }

        private void openFileDialog1_FileOk(object sender, CancelEventArgs e)
        {
            this.PBFoto.Image = Image.FromFile(this.openFileDialog1.FileName);
        }

        private void apePaternoTextBox_TextChanged(object sender, EventArgs e)
        {
            CurrentPersona.ApePaterno = apePaternoTextBox.Text;
            LNombreCompleto.Text = CurrentPersona.NombreCompleto;
        }

        private void apeMaternoTextBox_TextChanged(object sender, EventArgs e)
        {
            CurrentPersona.ApeMaterno = apeMaternoTextBox.Text;
            LNombreCompleto.Text = CurrentPersona.NombreCompleto;
        }

        private void nombresTextBox_TextChanged(object sender, EventArgs e)
        {
            CurrentPersona.Nombres = nombresTextBox.Text;
            LNombreCompleto.Text = CurrentPersona.NombreCompleto;
        }

        private void dniTextBox_TextChanged(object sender, EventArgs e)
        {
            CurrentPersona.Dni = dniTextBox.Text;
            LNumDNI.Text = CurrentPersona.Dni;
        }

        private void BtnExtProfesion_Click(object sender, EventArgs e)
        {
            var _persona = pERSONABindingSource.Current as PERSONA;
            PROFESION currentprofesion = pERSONA_PROFESIONBindingSource.Current as PROFESION;
            FrmProfesion frm = new FrmProfesion();
            frm.Extend();
            frm.currentUsuarioProfesion = currentUsuarioMttoPersona;
            frm.ShowDialog();
            currentprofesion = frm.CurrentProfesion;
            if (currentprofesion != null)
            {
                var _profesion = new PERSONA_PROFESION
                {
                    ProfesionId = currentprofesion.Id,
                    PROFESION = currentprofesion
                };


                //var existe = _persona.PERSONA_PROFESION.Where(p => p.PROFESION.Id.Equals(_profesion.ProfesionId)).SingleOrDefault();
                var existe = _persona.PERSONA_PROFESION.SingleOrDefault(p => p.PROFESION.Id.Equals(_profesion.ProfesionId));
                if (existe == null)
                {
                    pERSONA_PROFESIONBindingSource.Add(_profesion);
                    pERSONA_PROFESIONBindingSource.ResetBindings(true);
                }
                else
                {
                    var rpt = MessageBox.Show(this, string.Format("La Profesión: {0}, " + "ya se agregó", currentprofesion.Descripcion),
                                       @"Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                }


            }
        }

        private void BtnExtEspecialidad_Click(object sender, EventArgs e)
        {
            var _persona = pERSONABindingSource.Current as PERSONA;
            ESPECIALIDAD currentespecialidad = pERSONA_ESPECIALIDADBindingSource.Current as ESPECIALIDAD;
            FrmEspecialidad frm = new FrmEspecialidad();
            frm.Extend();
            frm.currentUsuarioEspecialidad = currentUsuarioMttoPersona;
            frm.ShowDialog();
            currentespecialidad = frm.CurrentEspecialidad;
            if (currentespecialidad != null)
            {
                var _especialidad = new PERSONA_ESPECIALIDAD
                {
                    EspecialidadId = currentespecialidad.Id,
                    ESPECIALIDAD = currentespecialidad
                };

                //var existe = _persona.PERSONA_ESPECIALIDAD.Where(p => p.ESPECIALIDAD.Id.Equals(_especialidad.EspecialidadId)).SingleOrDefault();
                var existe = _persona.PERSONA_ESPECIALIDAD.SingleOrDefault(p => p.ESPECIALIDAD.Id.Equals(_especialidad.EspecialidadId));
                if (existe == null)
                {
                    pERSONA_ESPECIALIDADBindingSource.Add(_especialidad);
                    pERSONA_ESPECIALIDADBindingSource.ResetBindings(true);
                }
                else
                {
                    var rpt = MessageBox.Show(this, string.Format("La Especialidad: {0}, " + "ya se agregó", currentespecialidad.Descripcion),
                                       @"Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                }
            }
        }

        private void BtnExtEmpresa_Click(object sender, EventArgs e)
        {
            FrmEmpresa frm = new FrmEmpresa();
            frm.Extend();
            frm.currentUsuarioEmpresa = currentUsuarioMttoPersona;
            frm.ShowDialog();
            if (frm.CurrentEmpresa != null)
            {
                _trabajo.EMPRESA = frm.CurrentEmpresa;
                TxtDescripcionEmpresa.Text = _trabajo.EMPRESA.Descripcion;

            }
        }

        private void BtnExtCargo_Click(object sender, EventArgs e)
        {
            FrmCargo frm = new FrmCargo();
            frm.Extend();
            frm.currentUsuarioCargo = currentUsuarioMttoPersona;
            frm.ShowDialog();
            if (frm.CurrentCargo != null)
            {
                _trabajo.CARGO = frm.CurrentCargo;
                TxtDescripcionCargo.Text = _trabajo.CARGO.Descripcion;

            }
        }

        private void BtnAgregarTrabajo_Click(object sender, EventArgs e)
        {
            var _persona = pERSONABindingSource.Current as PERSONA;
            if (_trabajo.CARGO != null & _trabajo.EMPRESA != null)
            {
                var _trabajopersona = new TRABAJO()
                {
                    CARGO = _trabajo.CARGO,
                    EMPRESA = _trabajo.EMPRESA,
                    CargoId = _trabajo.CARGO.Id,
                    EmpresaId = _trabajo.EMPRESA.Id,
                    FechaInicio = fechaInicioDateTimePicker.Value.Date,
                    FechaFin = fechaFinDateTimePicker.Value.Date,
                };

                //if (isnew == true)
                //{
                //var existe = _persona.TRABAJOes.Where(p => p.CargoId.Equals(_trabajopersona.CargoId) & p.EmpresaId.Equals(_trabajopersona.EmpresaId)).SingleOrDefault();
                var existe = _persona.TRABAJOes.SingleOrDefault(p => p.CargoId.Equals(_trabajopersona.CargoId) & p.EmpresaId.Equals(_trabajopersona.EmpresaId));
                if (existe == null)
                {
                    tRABAJOesBindingSource.Add(_trabajopersona);
                    tRABAJOesBindingSource.ResetBindings(true);
                }
                else
                {
                    var rpt = MessageBox.Show(this, string.Format("El trabajo en : " + _trabajopersona.EMPRESA.Descripcion + " con el cargo de : " + _trabajopersona.CARGO.Descripcion + " ya se agregó",
                                       "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Stop));
                }

                //}
                //_trabajo = null;
                TxtDescripcionCargo.Text = null;
                TxtDescripcionEmpresa.Text = null;
            }
            else
            {
                MessageBox.Show(@"Llene información de Trabajo");
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.openFileDialog1.ShowDialog();
        }

        private void BtnGuardar_Click(object sender, EventArgs e)
        {
            var currentPersona = pERSONABindingSource.Current as PERSONA;

            if (rbtnNOCreyente.Checked == true)
            {
                currentPersona.NoCreyente = true;
                currentPersona.Transferido = false;
                currentPersona.Transferencia = false;
                currentPersona.Local = false;
            }
            if (rbtnLocal.Checked == true)
            {
                currentPersona.NoCreyente = false;
                currentPersona.Transferido = false;
                currentPersona.Transferencia = false;
                currentPersona.Local = true;
            }
            if (rbtnTransferencia.Checked == true)
            {
                currentPersona.NoCreyente = false;
                currentPersona.Transferido = false;
                currentPersona.Transferencia = true;
                currentPersona.Local = false;
            }
            if (rbtnTransferido.Checked == true)
            {
                currentPersona.NoCreyente = false;
                currentPersona.Transferido = true;
                currentPersona.Transferencia = false;
                currentPersona.Local = false;
            }

            currentPersona.Muerte = currentPersona.Muerte = rbtnMuerte.Checked ? true : false;
            currentPersona.Estado = currentPersona.Estado = rbtnActivo.Checked ? true : false;

            if (currentPersona.UbigeoId == 0)
            {
                //MessageBox.Show("Necesita Ingresar un Ubigeo", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                currentPersona.UbigeoId = currentPersona.UBIGEO.numero;
            }

            if (currentPersona.Local == false & currentPersona.Transferencia == false & currentPersona.Transferido == false)
            {
                currentPersona.IglesiaId = 1;
                currentPersona.CelulaId = 1;
                currentPersona.DiscipuladorId = 1;
            }
            if (currentPersona.Local == true)
            {
                currentPersona.IglesiaId = 2;
                currentPersona.IGLESIA = iglesiaBL.GetFromIglesiaById(currentPersona.IglesiaId);
            }
            if (currentPersona.IglesiaId == 2)
            {
                currentPersona.IglesiaId = 2;
            }
            if (currentPersona.IglesiaId == 0)
            {
                currentPersona.IglesiaId = 1;
            }
            if (currentPersona.CelulaId == 0)
            {
                currentPersona.CelulaId = 1;
            }
            if (currentPersona.DiscipuladorId == 0)
            {
                currentPersona.DiscipuladorId = 1;
            }

            if (CBCargoMinisterio.SelectedIndex == 0)
            {
                currentPersona.CargoMinisterio = 1;
            }

            if (CBCargoMinisterio.SelectedIndex == 1)
            {
                currentPersona.CargoMinisterio = 2;
            }

            if (CBCargoMinisterio.SelectedIndex == 2)
            {
                currentPersona.CargoMinisterio = 3;
            }

            if (CBCargoMinisterio.SelectedIndex == 3)
            {
                currentPersona.CargoMinisterio = 4;
            }

            if (CBCargoMinisterio.SelectedIndex == -1)
            {
                currentPersona.CargoMinisterio = 4;
            }

            var msg = "ERROR";
            if (currentPersona != null)
            {
                if (isnew == true)
                {
                    try
                    {
                        if (PBFoto.Image != null && PBFoto.Image != PBFoto.ErrorImage)
                        {
                            ObtenerImg();
                            var foto = new FOTO_PERSONA()
                            {
                                Imagen = pic,
                                Hash = sb.ToString(),
                                PersonaId = currentPersona.Id
                            };

                            currentPersona.FOTO_PERSONA = foto;
                            currentPersona.ApePaterno = apePaternoTextBox.Text.ToUpper();
                            currentPersona.ApeMaterno = apeMaternoTextBox.Text.ToUpper();
                            currentPersona.Nombres = nombresTextBox.Text.ToUpper();
                            currentPersona.Direccion = direccionTextBox.Text.ToUpper();
                            currentPersona.Servicios = serviciosTextBox.Text.ToUpper();
                            currentPersona.Email = emailTextBox.Text;
                            //USUARIO usuario = new USUARIO()
                            //{
                            //    RolId = 1,
                            //    PersonaId = currentPersona.Id,
                            //    Password = "e10adc3949ba59abbe56e057f20f883e".ToUpper()
                            //};
                            //currentPersona.USUARIO = usuario;
                            personaBL.AddPersona(currentPersona);
                            MessageBox.Show(@"Registro Correcto", @"Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);


                            //var ver = MessageBox.Show(this, string.Format("Desea imprimir la Proforma"),
                            //    "Mensaje", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

                            //if (ver == DialogResult.Yes)
                            //{
                            //    Reportes.frmRegistroMiembros frm = new Reportes.frmRegistroMiembros();
                            //    frm.ObtenerId(currentPersona.Id);
                            //    frm.ShowDialog();
                            //}
                            this.Close();


                        }
                        else
                        {
                            var rpt = MessageBox.Show(this, @"¿Seguro que desea guardar a Persona sin una imagen?", @"Mensaje", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                            if (rpt == DialogResult.Yes)
                            {
                                var foto = new FOTO_PERSONA()
                                {
                                    PersonaId = currentPersona.Id
                                };

                                currentPersona.FOTO_PERSONA = foto;
                                currentPersona.ApePaterno = apePaternoTextBox.Text.ToUpper();
                                currentPersona.ApeMaterno = apeMaternoTextBox.Text.ToUpper();
                                currentPersona.Nombres = nombresTextBox.Text.ToUpper();
                                currentPersona.Direccion = direccionTextBox.Text.ToUpper();
                                currentPersona.Servicios = serviciosTextBox.Text.ToUpper();
                                currentPersona.Email = emailTextBox.Text;
                                //USUARIO usuario = new USUARIO()
                                //{
                                //    RolId = 1,
                                //    PersonaId = currentPersona.Id,
                                //    Password = "e10adc3949ba59abbe56e057f20f883e".ToUpper()
                                //};
                                //currentPersona.USUARIO = usuario;
                                personaBL.AddPersona(currentPersona);
                                MessageBox.Show(@"Registro Correcto", @"Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);

                                //var ver = MessageBox.Show(this, string.Format("¿Desea imprimir la Ficha Membresía?"),
                                //"Mensaje", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

                                //if (ver == DialogResult.Yes)
                                //{
                                //    Reportes.frmRegistroMiembros frm = new Reportes.frmRegistroMiembros();
                                //    frm.ObtenerId(currentPersona.Id);
                                //    frm.ShowDialog();
                                //}
                                this.Close();
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        msg = ex.Message;
                        MessageBox.Show(msg, @"Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }

                }
                if (isnew == false)
                {
                    try
                    {
                        if (PBFoto.Image != null && PBFoto.Image != PBFoto.ErrorImage)
                        {
                            ObtenerImg();
                            var foto = new FOTO_PERSONA()
                            {
                                Imagen = pic,
                                Hash = sb.ToString(),
                                PersonaId = currentPersona.Id
                            };

                            currentPersona.FOTO_PERSONA = foto;
                            currentPersona.ApePaterno = apePaternoTextBox.Text.ToUpper();
                            currentPersona.ApeMaterno = apeMaternoTextBox.Text.ToUpper();
                            currentPersona.Nombres = nombresTextBox.Text.ToUpper();
                            currentPersona.Direccion = direccionTextBox.Text.ToUpper();
                            currentPersona.Email = emailTextBox.Text.ToUpper();
                            currentPersona.Servicios = serviciosTextBox.Text.ToUpper();
                            personaBL.UpdatePersona(currentPersona);
                            MessageBox.Show(@"Modificación Correcta", @"Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);

                            Close();

                        }
                        else
                        {
                            var rpt = MessageBox.Show(this, @"¿Seguro que desea guardar a Persona sin una imagen?", @"Mensaje", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                            if (rpt == DialogResult.Yes)
                            {
                                var foto = new FOTO_PERSONA()
                                {
                                    PersonaId = currentPersona.Id
                                };

                                currentPersona.FOTO_PERSONA = foto;
                                currentPersona.ApePaterno = apePaternoTextBox.Text.ToUpper();
                                currentPersona.ApeMaterno = apeMaternoTextBox.Text.ToUpper();
                                currentPersona.Nombres = nombresTextBox.Text.ToUpper();
                                currentPersona.Direccion = direccionTextBox.Text.ToUpper();
                                currentPersona.Email = emailTextBox.Text.ToUpper();
                                currentPersona.Servicios = serviciosTextBox.Text.ToUpper();
                                personaBL.UpdatePersona(currentPersona);
                                MessageBox.Show(@"Modificación Correcta", @"Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                Close();
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        msg = ex.Message;
                        MessageBox.Show(msg, @"Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                }
            }
        }

        private void ObtenerImg()
        {
            sb = new StringBuilder();
            /* Convertir la imagen en arreglo de bytes[] */
            MemoryStream stream = new MemoryStream();
            PBFoto.Image.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);
            pic = stream.ToArray();

            /* Obtener el md5 */
            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
            byte[] hash = md5.ComputeHash(pic);

            foreach (byte b in hash)
            {
                sb.Append(b.ToString("x2").ToUpper());
            }
        }

        private void dniTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsNumber(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void idUbigeoTextBox_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                var ubigeo = ubigeoBL.GetFromUbigeoByUbigeo(idUbigeoTextBox.Text);
                if (ubigeo != null)
                {
                    CurrentPersona.UBIGEO = ubigeo;
                    CurrentPersona.UbigeoId = ubigeo.numero;
                }
                else
                {
                    var rpt = MessageBox.Show(this, @"Ubigeo NO Existente ¿Desea Crear Ubigeo?", @"Mensaje", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    if (rpt == DialogResult.Yes)
                    {
                        frmMttUbigeo frm = new frmMttUbigeo();
                        frm.AddUbigeo();
                        frm.ShowDialog();
                    }
                    else
                    {
                        CurrentPersona.UbigeoId = 1828;
                        CurrentPersona.UBIGEO = ubigeoBL.GetFromUbigeoByNumero(CurrentPersona.UbigeoId);
                    }
                }


                CurrentPersona.EstadoCivilId = Int32.Parse(CBEstadoCivil.SelectedValue.ToString());
                CurrentPersona.SexoId = Int32.Parse(CBSexo.SelectedValue.ToString());

                pERSONABindingSource.ResetBindings(true);
            }
            else if (e.KeyCode == Keys.F1)
            {

            }
        }

        private void idUbigeoTextBox_Leave(object sender, EventArgs e)
        {
            if (idUbigeoTextBox.Text != string.Empty)
            {
                var ubigeo = ubigeoBL.GetFromUbigeoByUbigeo(idUbigeoTextBox.Text);
                if (ubigeo != null)
                {
                    CurrentPersona.UBIGEO = ubigeo;
                    CurrentPersona.UbigeoId = ubigeo.numero;
                }
                else
                {
                    var rpt = MessageBox.Show(this, @"Ubigeo NO Existente ¿Desea Crear Ubigeo?", @"Mensaje", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    if (rpt == DialogResult.Yes)
                    {
                        frmMttUbigeo frm = new frmMttUbigeo();
                        frm.AddUbigeo();
                        frm.ShowDialog();
                    }
                    else
                    {
                        CurrentPersona.UbigeoId = 1828;
                        CurrentPersona.UBIGEO = ubigeoBL.GetFromUbigeoByNumero(CurrentPersona.UbigeoId);
                    }
                }
                //CurrentPersona.EstadoCivilId = Int32.Parse(CBEstadoCivil.SelectedValue.ToString());
                //CurrentPersona.SexoId = Int32.Parse(CBSexo.SelectedValue.ToString());
                pERSONABindingSource.ResetBindings(true);
            }

        }

        private void dniTextBox_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                VerificarDni();
            }
        }

        private void BtnCheck_Click(object sender, EventArgs e)
        {
            VerificarDni();
        }

        private void VerificarDni()
        {
            if (dniTextBox.Text != string.Empty && dniTextBox.Text.CompareTo("00000000") != 0)
            {
                var _persona = personaBL.GetFromPersonaByDni(dniTextBox.Text);

                if (_persona != null)
                {
                    pERSONABindingSource.DataSource = _persona;
                    MessageBox.Show(@"Persona Existente", @"Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                    Close();
                }
            }
            else if (dniTextBox.Text.CompareTo("00000000") == 0)
            {
                dniTextBox.Text = @"00000000";
            }
            else
            {
                dniTextBox.Text = @"00000000";
            }
        }

        private void dniTextBox_Leave(object sender, EventArgs e)
        {
            VerificarDni();
        }

        //private void BtnQuitarProfesion_Click(object sender, EventArgs e)
        //{
        //    var _profesion = pERSONA_PROFESIONBindingSource.Current as PERSONA_PROFESION;

        //    if (_profesion != null)
        //    {
        //        var rpt = MessageBox.Show(this, string.Format("¿Desea quitar la profesión: {0}?", _profesion.PROFESION.Descripcion),
        //                "Mensaje", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

        //        if (rpt == DialogResult.Yes)
        //        {
        //            pERSONA_PROFESIONBindingSource.RemoveCurrent();

        //        }
        //    }
        //}

        //private void BtnQuitarEspecialidad_Click(object sender, EventArgs e)
        //{
        //    var _especialidad = pERSONA_ESPECIALIDADBindingSource.Current as PERSONA_ESPECIALIDAD;


        //    if (_especialidad != null)
        //    {
        //        var rpt = MessageBox.Show(this, string.Format("¿Desea quitar la especialidad: {0}?", _especialidad.ESPECIALIDAD.Descripcion),
        //                "Mensaje", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

        //        if (rpt == DialogResult.Yes)
        //        {
        //            pERSONA_PROFESIONBindingSource.RemoveCurrent();

        //        }
        //    }
        //}

        //private void BtnQuitarExperienciaLaboral_Click(object sender, EventArgs e)
        //{
        //    var _trabajo = tRABAJOesBindingSource.Current as TRABAJO;


        //    if (_trabajo != null)
        //    {
        //        var rpt = MessageBox.Show(this, string.Format("¿Desea quitar el trabajo: {0}?", _trabajo.EMPRESA.Descripcion + " - " + _trabajo.CARGO.Descripcion),
        //                "Mensaje", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

        //        if (rpt == DialogResult.Yes)
        //        {
        //            tRABAJOesBindingSource.RemoveCurrent();

        //        }
        //    }
        //}

        private void nroMembresiaTextBox_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                if (nroMembresiaTextBox.Text != string.Empty)
                {
                    var _persona = personaBL.GetFromPersonaByNroMembresia(Convert.ToInt32(nroMembresiaTextBox.Text));

                    if (_persona != null)
                    {
                        MessageBox.Show(@"Nro Membresia no Disponible", @"Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                        nroMembresiaTextBox.Text = @"0";
                    }
                }
            }
        }

        private void nroMembresiaTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsNumber(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void nroMembresiaTextBox_Leave(object sender, EventArgs e)
        {
            if (nroMembresiaTextBox.Text != string.Empty)
            {
                var _persona = personaBL.GetFromPersonaByNroMembresia(Convert.ToInt32(nroMembresiaTextBox.Text));

                if (_persona != null)
                {
                    MessageBox.Show(@"Nro Membresia no Disponible", @"Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                    nroMembresiaTextBox.Text = @"0";
                }
            }

        }

        private void rbtnNOCreyente_CheckedChanged(object sender, EventArgs e)
        {
            if (rbtnNOCreyente.Checked == true)
            {
                GBDatosCreyente.Enabled = false;
                GBFechasCreyente.Enabled = false;
            }
        }

        private void rbtnLocal_CheckedChanged(object sender, EventArgs e)
        {
            if (rbtnLocal.Checked && rbtnMuerte.Checked)
            {
                GBDatosCreyente.Enabled = true;
                GBFechasCreyente.Enabled = true;
                fechaBautizoTextBox.ReadOnly = false;
                fechaConversionTextBox.ReadOnly = false;
                fechaTransferenciaTextBox.ReadOnly = true;
                fechaNoMiembroTextBox.ReadOnly = true;
                fechaMuerteTextBox.ReadOnly = false;
            }
            if (rbtnLocal.Checked)
            {
                GBDatosCreyente.Enabled = true;
                GBFechasCreyente.Enabled = true;
                fechaBautizoTextBox.ReadOnly = false;
                fechaConversionTextBox.ReadOnly = false;
                fechaTransferenciaTextBox.ReadOnly = true;
                fechaNoMiembroTextBox.ReadOnly = true;
                fechaMuerteTextBox.ReadOnly = true;
            }
        }

        private void rbtnTransferencia_CheckedChanged(object sender, EventArgs e)
        {
            if (rbtnTransferencia.Checked == true && rbtnMuerte.Checked == true)
            {
                GBDatosCreyente.Enabled = true;
                GBFechasCreyente.Enabled = true;
                fechaBautizoTextBox.ReadOnly = false;
                fechaConversionTextBox.ReadOnly = false;
                fechaTransferenciaTextBox.ReadOnly = false;
                
                fechaMuerteTextBox.ReadOnly = false;
            }
            else if (rbtnTransferencia.Checked == true)
            {
                GBDatosCreyente.Enabled = true;
                GBFechasCreyente.Enabled = true;
                fechaBautizoTextBox.ReadOnly = false;
                fechaConversionTextBox.ReadOnly = false;
                fechaTransferenciaTextBox.ReadOnly = false;
                fechaNoMiembroTextBox.ReadOnly = false;
                fechaMuerteTextBox.ReadOnly = true;
            }
        }

        private void rbtnTransferido_CheckedChanged(object sender, EventArgs e)
        {
            if (rbtnTransferido.Checked && rbtnMuerte.Checked)
            {
                GBDatosCreyente.Enabled = true;
                GBFechasCreyente.Enabled = true;
                fechaBautizoTextBox.ReadOnly = false;
                fechaConversionTextBox.ReadOnly = false;
                fechaNoMiembroTextBox.ReadOnly = false;
                fechaMuerteTextBox.ReadOnly = false;
            }
            else if (rbtnTransferido.Checked)
            {
                GBDatosCreyente.Enabled = true;
                GBFechasCreyente.Enabled = true;
                fechaBautizoTextBox.ReadOnly = false;
                fechaConversionTextBox.ReadOnly = false;
                fechaNoMiembroTextBox.ReadOnly = false;
                fechaMuerteTextBox.ReadOnly = true;
            }
        }

        private void rbtnActivo_CheckedChanged(object sender, EventArgs e)
        {
            if (rbtnActivo.Checked == true && rbtnLocal.Checked == true)
            {
                fechaMuerteTextBox.ReadOnly = true;
            }
            if (rbtnActivo.Checked == true && rbtnTransferencia.Checked == true)
            {
                fechaMuerteTextBox.ReadOnly = true;
            }
            if (rbtnActivo.Checked == true && rbtnTransferido.Checked == true)
            {
                fechaMuerteTextBox.ReadOnly = true;
            }
        }

        private void rbtnMuerte_CheckedChanged(object sender, EventArgs e)
        {
            if (rbtnMuerte.Checked == true && rbtnLocal.Checked == true)
            {
                fechaMuerteTextBox.ReadOnly = false;
            }
            if (rbtnMuerte.Checked == true && rbtnTransferencia.Checked == true)
            {
                fechaMuerteTextBox.ReadOnly = false;
            }
            if (rbtnMuerte.Checked == true && rbtnTransferido.Checked == true)
            {
                fechaMuerteTextBox.ReadOnly = false;
            }
        }

        private void pERSONA_PROFESIONDataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            var _profesion = pERSONA_PROFESIONBindingSource.Current as PERSONA_PROFESION;


            if (_profesion != null)
            {
                if (this.pERSONA_PROFESIONDataGridView.Columns[e.ColumnIndex].Name.Equals("btnQuitarProf"))
                {
                    var rpt = MessageBox.Show(this, string.Format("¿Desea quitar la profesión: {0}?", _profesion.PROFESION.Descripcion),
                        @"Mensaje", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

                    if (rpt == DialogResult.Yes)
                    {
                        if (_profesion.Id > 0)
                        {
                            personaprofesionBL.RemovePersonaProfesionByPersonaIdProfesionId(_profesion.PersonaId, _profesion.ProfesionId);
                        }
                        pERSONA_PROFESIONBindingSource.RemoveCurrent();
                        pERSONA_PROFESIONBindingSource.ResetBindings(true);
                    }
                }
            }
        }

        private void pERSONA_ESPECIALIDADDataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            var _especialidad = pERSONA_ESPECIALIDADBindingSource.Current as PERSONA_ESPECIALIDAD;

            if (_especialidad != null)
            {
                if (this.pERSONA_ESPECIALIDADDataGridView.Columns[e.ColumnIndex].Name.Equals("btnQuitarEsp"))
                {
                    var rpt = MessageBox.Show(this, string.Format("¿Desea quitar la especialidad: {0}?", _especialidad.ESPECIALIDAD.Descripcion),
                            "Mensaje", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

                    if (rpt == DialogResult.Yes)
                    {
                        if (_especialidad.Id > 0)
                        {
                            personaespecialidadBL.RemovePersonaEspecialidadByPersonaIdAndEspecialidadId(_especialidad.PersonaId, _especialidad.EspecialidadId);
                        }
                        pERSONA_ESPECIALIDADBindingSource.RemoveCurrent();
                        pERSONA_ESPECIALIDADBindingSource.ResetBindings(true);
                    }
                }
            }
        }

        private void tRABAJOesDataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            var _trabajo = tRABAJOesBindingSource.Current as TRABAJO;


            if (_trabajo != null)
            {
                if (this.tRABAJOesDataGridView.Columns[e.ColumnIndex].Name.Equals("btnQuitarLab"))
                {
                    var rpt = MessageBox.Show(this, string.Format("¿Desea quitar el trabajo: {0}?", _trabajo.EMPRESA.Descripcion + " - " + _trabajo.CARGO.Descripcion),
                            @"Mensaje", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

                    if (rpt == DialogResult.Yes)
                    {
                        if (_trabajo.Id > 0)
                        {
                            trabajoBL.RemoveTrabajoByEmpresaIdAndCargoId(_trabajo.EmpresaId, _trabajo.CargoId);
                        }
                        tRABAJOesBindingSource.RemoveCurrent();
                        tRABAJOesBindingSource.ResetBindings(true);
                    }
                }
            }
        }

        private void rbtnMuerte_CheckedChanged_1(object sender, EventArgs e)
        {
            if (rbtnMuerte.Checked && rbtnLocal.Checked)
            {
                fechaMuerteTextBox.ReadOnly = false;
            }
            else if (rbtnMuerte.Checked && rbtnTransferencia.Checked)
            {
                fechaMuerteTextBox.ReadOnly = false;
            }
            if (rbtnMuerte.Checked && rbtnTransferido.Checked)
            {
                fechaMuerteTextBox.ReadOnly = false;
            }
            if (!rbtnMuerte.Checked)
            {
                fechaMuerteTextBox.ReadOnly = true;
            }
        }

        private void rbtnActivo_CheckedChanged_1(object sender, EventArgs e)
        {
            if (rbtnActivo.Checked == true && rbtnLocal.Checked == true)
            {
                fechaMuerteTextBox.ReadOnly = true;
            }
            if (rbtnActivo.Checked == true && rbtnTransferencia.Checked == true)
            {
                fechaMuerteTextBox.ReadOnly = true;
            }
            if (rbtnActivo.Checked == true && rbtnTransferido.Checked == true)
            {
                fechaMuerteTextBox.ReadOnly = true;
            }
            if (rbtnActivo.Checked == false)
            {
                fechaMuerteTextBox.ReadOnly = true;
            }
        }
    }
}
